import axios from 'axios'
// 01:引入 vuex
import { createStore } from 'vuex';

// 03: 导入定义的子模块car.js
import carmodule from './modules/car';

// 04: 引入vuex持久化插件 
import createPersistedState from 'vuex-persistedstate';
console.log('createPersistedState', createPersistedState);

// 02: 创建仓库
const store = createStore({
    state() {  // 用来存放所有的组件共享的数据
        return {
            count: 0,  // count 就是store 仓库中的数据
            schoolList: [],  // 存的是学校列表
            airportarr: []  // 定义机场数据列表
        }
    },
    mutations: { //该对象中存放的都是同步方法, 不能存放异步方法
        addcount(state) {
            // setTimeout(() => {
            state.count++
            // }, 2000)
        },
        addcountstep(state, step) {
            state.count += step
        },
        setschoollist(state, data) {
            // 同步修改学校列表
            state.schoolList = data
        },
        setAirPortArr(state, data) {
            // 同步修改机场数据列表
            state.airportarr = data
        },
        jian(state) {
            //同步方法 减count 
            state.count--
        },
        addcar(state, item) {
            console.log('我是一级模块中的addcar方法');

        }
    },
    actions: { // 该对象中存放的都是异步方法, 用来调用同步的mutations中的方法, 然后修改数据
        //  所有的actions 中的方法都不能直接去修改state 中的数据,只能调用muations 修改
        addcountAsync({ commit }) {
            // context 上下文对象
            // console.log('context', context);
            setTimeout(() => {
                commit('addcount')
            }, 2000)
        },
        addcountstepAsync({ commit }, step) {
            setTimeout(() => {
                commit('addcountstep', step)
            }, 2000)
        },
        setschoolListAsync({ commit }, pagenum) {
            axios.get('https://api.i-lynn.cn/college', {
                params: {
                    page: pagenum
                }
            }).then(res => {
                console.log(res);
                // 调用同步的muations 方法修改schoollist
                commit('setschoollist', res.data.data.list1)
            })
        },
        jianAsync({ commit }) {
            // 减count没有异步
            commit('jian')
        }
    },
    getters: { // 相当于仓库store中的计算属性
        doubleCount(state) { // doubleCount为计算属性名
            // state 就是仓库中的state 对象
            return state.count * 2
        },
        fiterSchool(state) {
            return state.schoolList.filter((item) => item.school_name.includes('北京'))
        }

    },
    modules: { // 存放所有的模块
        carmodule  // 子模块
    },
    plugins: [ // 配置vuex 插件
        // createPersistedState(),  // 默认是localstorage 永久化存储
        createPersistedState({
            //storage: window.sessionStorage, // 指定存储方式在会话存贮中
            // key: 'store',  // 指定存储的key
            reducer(state) { // 指定存储某一个值
                return { 'count': state.count } // return 的返回值就是要存的数据
            }
        })
    ]

})

// 使用es6 模块化语法导出 store
export default store